import type { MenuListType } from '@/types/menu'

// 保存iframe类型路由的全局存储
let iframeRouteList: MenuListType[] = []

/**
 * 保存iframe路由到全局存储
 * @param routes iframe类型的路由列表
 */
export const saveIframeRoutes = (routes: MenuListType[]): void => {
  iframeRouteList = routes
  console.log('保存iframe路由:', iframeRouteList)
}

/**
 * 获取保存的iframe路由列表
 * @returns iframe路由列表
 */
export const getIframeRoutes = (): MenuListType[] => {
  return iframeRouteList
}

/**
 * 判断路径是否为iframe类型
 * @param path 路径
 * @returns 是否为iframe类型
 */
export const isIframePath = (path: string): boolean => {
  return iframeRouteList.some(route => route.path === path)
}

/**
 * 通过路径获取iframe路由信息
 * @param path 路径
 * @returns iframe路由或undefined
 */
export const getIframeRouteByPath = (path: string): MenuListType | undefined => {
  return iframeRouteList.find(route => route.path === path)
}

/**
 * 将服务器返回的树形菜单转换为一维数组
 * @param menuTree 树形菜单
 * @returns 扁平化后的菜单数组
 */
export const flattenMenuTree = (menuTree: MenuListType[]): MenuListType[] => {
  const result: MenuListType[] = []
  
  const flatten = (items: MenuListType[]) => {
    items.forEach(item => {
      result.push(item)
      if (item.children && item.children.length > 0) {
        flatten(item.children)
      }
    })
  }
  
  flatten(menuTree)
  return result
}

/**
 * 处理布局组件映射
 * @param component 组件名称
 * @returns 处理后的组件名称
 */
export const handleComponentMapping = (component: string): string => {
  // 如果为空，返回空字符串
  if (!component) {
    return '';
  }
  
  // Layout组件特殊处理
  if (component === 'Layout') {
    return 'layout/AppLayout';
  }
  
  // 已包含完整路径的情况，不做处理
  if (component.startsWith('@/') || component.startsWith('/')) {
    return component;
  }
  
  // 处理常见目录结构
  // 检查是否已经包含index，避免重复添加
  if (component.endsWith('/index')) {
    return component;
  }
  
  // 后端返回的组件路径格式通常是 "module/section"
  // 我们需要确保它指向正确的文件，如 "module/section/index"
  
  // 检查是否有目录分隔符，如果有且不是以index结尾，添加/index
  if (component.includes('/') && !component.endsWith('/index')) {
    // 进一步检查路径的格式
    const parts = component.split('/');
    const lastPart = parts[parts.length - 1];
    
    // 如果最后一部分看起来像文件名（包含.），则不添加/index
    if (lastPart.includes('.')) {
      return component;
    }
    
    // 否则添加/index
    return `${component}/index`;
  }
  
  return component;
}

export default {
  saveIframeRoutes,
  getIframeRoutes,
  isIframePath,
  getIframeRouteByPath,
  flattenMenuTree,
  handleComponentMapping
} 